package com.zhou.jianzhi.controller.web;

import com.zhou.jianzhi.common.AjaxResult;
import com.zhou.jianzhi.entity.dto.AliyunOssDTO;
import com.zhou.jianzhi.service.IAliyunOssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;

/**
 * 文件上传控制器
 *
 * @author zhou
 */
@RestController
@RequestMapping("/file")
public class FileUploadController {

    @Autowired
    private IAliyunOssService aliyunOssService;

    /**
     * 通用文件上传接口
     * @param file 文件
     * @param type 文件类型（可选）
     * @param source 文件来源（可选）
     * @param used 文件用途（1：头像 2：其他。求职者为简历，招聘方为审核文件）
     * @param jobseekerId 求职者ID（可选）
     * @param recruitUnitId 招聘单位ID（可选）
     * @return 上传结果
     */
    @PostMapping("/upload")
    public AjaxResult uploadFile(
            @RequestParam("file") MultipartFile file,
            @RequestParam(value = "type", required = false) String type,
            @RequestParam(value = "source", required = false) String source,
            @RequestParam(value = "used", required = false) Integer used,
            @RequestParam(value = "jobseekerId", required = false) Integer jobseekerId,
            @RequestParam(value = "recruitUnitId", required = false) Integer recruitUnitId
    ) {
        try {
            if (file.isEmpty()) {
                return AjaxResult.error("上传文件不能为空");
            }

            // 生成唯一文件名
            String originalFilename = file.getOriginalFilename();
            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
            String fileName = UUID.randomUUID().toString().replace("-", "") + extension;

            // 构建AliyunOssDTO对象
            AliyunOssDTO aliyunOssDTO = new AliyunOssDTO();
            aliyunOssDTO.setFileName(fileName);
            aliyunOssDTO.setType(type);
            aliyunOssDTO.setSource(source);
            aliyunOssDTO.setUsed(used);
            aliyunOssDTO.setJobseekerId(jobseekerId);
            aliyunOssDTO.setRecruitUnitId(recruitUnitId);

            // 上传文件到OSS并保存记录
            return aliyunOssService.uploadFile(file, aliyunOssDTO);
        } catch (Exception e) {
            return AjaxResult.error("文件上传失败：" + e.getMessage());
        }
    }
} 